"""
集合之可变集合 set 介绍
"""

# 集合set 的使用说明
print(dir(set))

# 1. 集合元素声明 和 初始化1。注意和 列表、字典的区别
d = {}
# 通过打印可知，只声明不做初始化，默认是字典类型而不是集合类型
print(type(d))
print(d)
s = {1, 2, 3, 4}
print(type(s))
print(s)

# 2. 集合元素声明 和 初始化2
set2 = set()
print(type(set2))
print(set2)
set1 = set([1, 2, 3, 4])
print(type(set1))
print(set1)

# 3. 集合中的元素是不可重复的
s1 = {1, 2, 3, 4, 'a', 'b', 'a', 'b', 1, 2}
print(type(s1))
print(s1)

# 4. 和字典中的 key 一样，集合中的元素必须是不可变对象，例如列表。因为可变对象是不可哈希的类型
# 如下方式将报错
# s2 = {1, 2, [1, 2, 3, 4]}

# 5. add 增加操作
print(help(set.add))
b_ = {1, 2, 3, 4, 'a', 'b'}
print(id(b_))
b_.add('a')
b_.add('新加元素')
print(id(b_))
# 通过打印结果与初始化对比可知，列表中的元素是无序的
print(b_)

# 5. pop 删除操作，会返回删除的元素值
print(help(set.pop))
a_b_ = {1, 2, 3, 4, 'a', 'b'}
pop = a_b_.pop()
print(pop)
print(a_b_)
print(a_b_.pop())
print(a_b_)
print(a_b_.pop())
print(a_b_)

# 6. remove 删除操作。根据元素删除，不返回删除的元素值
print(help(set.remove))
b_1 = {1, 2, 3, 4, 'a', 'b'}
b_1.remove(1)
print(b_1)
b_1.remove(2)
print(b_1)
b_1.remove('a')
print(b_1)

# 7. discard 删除操作，不返回删除的元素值。使用 pop 或 remove 删除操作，如果集合为空或对应删除的元素值不存在将会报错，而 discard 不会
print(help(set.discard))
b_2 = {1, 2, 3, 4, 'a', 'b'}
b_2.discard(11)
print(b_2)
b_2.discard(3)
print(b_2)

# 8. in 判断指定元素值是否在集合中
b_3 = {1, 2, 3, 4, 'a', 'b'}
print(1 in b_3)
print('c' in b_3)

# 9. len 获取集合长度
print(len(b_3))
